'use strict';
const { getDataByText } = require('../utils/utils');

class Gshq {
  constructor(requestReptile) {
    this.requestReptile = requestReptile;
  }

  // 通过代码获取行情
  async gshq(codes) {
    const url = `https://push2.eastmoney.com/api/qt/ulist.np/get?secids=${codes.join(',')}&fields=f2,f3,f4,f12,f14&ut=6d2ffaa6a585d612eda28417681d58fb&cb=callback&_=1598962493320`;
    const res = await this.requestReptile(url, 'text');
    const data = getDataByText(
      res,
      { data: 'data', },
      'data.data.diff',
      'callback'
    );
    const map = {
      f2: 'zxj',
      f3: 'zdf',
      f4: 'zde',
      f12: 'code',
      f14: 'name'
    };

    return data.map(item => {
      const gp = {};
      Object.keys(map).forEach(key => {
        gp[map[key]] =
          key === 'f3' || key === 'f4'
            ? item[key] / 100
            : item[key];
      });
      return gp;
    });
  }

  // 全球股市
  async qqgs() {
    const qqCodes = [
      // 德国DAX30
      '100.GDAXI',
      // 纳斯达克
      '100.NDX',
      // 道琼斯
      '100.DJIA',
      // 标普500
      '100.SPX',
    ];
    return this.gshq(qqCodes);
  }

  // 港股
  async gggs() {
    const ggCodes = [
      // 恒生指数
      '100.HSI',
      // 国企指数
      '100.HSCEI'
    ];
    return this.gshq(ggCodes);
  }

  // a股
  async ags() {
    const aCodes = [
      // 上证指数
      '1.000001',
      // 深证成指
      '0.399001',
      // 创业板指
      '0.399006',
      // 中小板指
      '0.399005'
    ];
    return this.gshq(aCodes);
  }

  // 全球股指
  async gzgs() {
    const gzCodes = [
      // 小型标普当月连续
      '103.ES00Y',
      // 小型道指当月连续
      '103.YM00Y',
      // 小型纳指当月连续
      '103.NQ00Y',
      // A50期指当月连续
      '104.CN00Y'
    ];
    return this.gshq(gzCodes);
  }
}

module.exports = Gshq;
